package model;



public class Posicion {


	Integer coordX;
	Integer coordY;
	
	static final int POSICION_MINIMA = 0;
	static final int POSICION_MAXIMA = Math.max(Mapa.getAltoMapa(), Mapa.getAnchoMapa());
	
	public Posicion () {		
		this.coordX = null;
		this.coordY = null;
	}
	
	public Posicion (Integer x, Integer y) {
		this.coordX = x;
		this.coordY = y;
	}
	
	public static int getPosicionMinima() { return POSICION_MINIMA;}
	
	public static int getPosicionMaxima() { return POSICION_MAXIMA;}
	
	public static Posicion generarPosicionAleatoria () {
		
		Posicion unaPosicion;
		
		int coordX = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(), Posicion.getPosicionMaxima());
		int coordY = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(), Posicion.getPosicionMaxima());
		
		unaPosicion = new Posicion (coordX,coordY);
		return unaPosicion;
	}
	
	//Devuelve una posicion aleatoria en algun borde del mapa
	public static Posicion generarPosicionEnBordes () {
		
		Posicion unaPosicion;
		//genero un numeoro entre 1 y 4 dado que son 4 bordes
		int valor = RandomInt.generarRandomEntre(1,4);
		int coordX;
		int coordY;
				
		switch (valor) {
		//1 correspendo al borde izquierdo
		case 1:
			coordX = Posicion.getPosicionMinima();
			coordY = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(),Posicion.getPosicionMaxima());
			break;
		//2 corresponde al borde derecho	
		case 2:
			coordX = Posicion.getPosicionMaxima();
			coordY = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(),Posicion.getPosicionMaxima());
			break;
		//3 corresponde al borde superior	
		case 3:
			coordX = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(),Posicion.getPosicionMaxima());
			coordY = Posicion.getPosicionMinima();
			break;
		//4 corresponde al borde inferior	
		case 4:
			coordX = RandomInt.generarRandomEntre(Posicion.getPosicionMinima(),Posicion.getPosicionMaxima());
			coordY = Posicion.getPosicionMaxima();
			break;
		// Default devuelve cero
		default:
			coordX = 0;
			coordY = 0;
			break;
		}
	
		unaPosicion = new Posicion (coordX,coordY);
		return unaPosicion;
	}
	
	public boolean esIgualA(Posicion otraPosicion) {
		
		return ((this.getX() == otraPosicion.getX()) && (this.getY() == otraPosicion.getY())); 
	
	}
	
	public int getX() { return this.coordX;}
	
	public int getY() { return this.coordY;}
	
	public void setX(Integer x) {this.coordX = x;}
	
	public void setY(Integer y) {this.coordY = y;}
	
	public boolean tienePosicionAtras(Posicion otraPosicion) {
		if (this.getY()==otraPosicion.getY()) {
			if (this.getX()-1 == otraPosicion.getX()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionAdelante(Posicion otraPosicion) {
		if (this.getY()==otraPosicion.getY()) {
			if (this.getX()+1 == otraPosicion.getX()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionArriba(Posicion otraPosicion) {
		if (this.getX()==otraPosicion.getX()) {
			if (this.getY()-1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}

	public boolean tienePosicionAbajo(Posicion otraPosicion) {
		if (this.getX()==otraPosicion.getX()) {
			if (this.getY()+1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionAbajoAtras(Posicion otraPosicion) {
		if (this.getX()-1==otraPosicion.getX()) {
			if (this.getY()+1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionAbajoAdelante(Posicion otraPosicion) {
		if (this.getX()+1==otraPosicion.getX()) {
			if (this.getY()+1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionArribaAdelante(Posicion otraPosicion) {
		if (this.getX()+1==otraPosicion.getX()) {
			if (this.getY()-1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}
	
	public boolean tienePosicionArribaAtras(Posicion otraPosicion) {
		if (this.getX()-1==otraPosicion.getX()) {
			if (this.getY()-1 == otraPosicion.getY()){
				return true;
			}
		}
		return false;
	}
	
}


